package reflect;

import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.lang.reflect.Parameter;
import java.util.Arrays;

/**
 * 利用反射机制调用Person类中所有无参方法
 * 1：加载Person的类对象
 * 2：实例化Person
 * 3:通过类对象获取所有无参方法
 *  提示：Method上定义了：int getParameterCount()
 *  该方法的作用是获取当前Method表示的方法中有多少个参数
 * 4：获取invoke来调用这个方法
 */
public class Test {
    public static void main(String[] args) throws Exception {
        Class cls = Class.forName("reflect.Person");
        Object obj = cls.newInstance();

        Method[] m = cls.getDeclaredMethods();//获取类下所有的方法，数组
        for (Method method : m) {
            if (method.getParameterCount()==0) {
                if (method.getParameterCount() == 0 &&
                        method.getName().contains("e")) {//名字中是否含有字符“e”
//            if (method.getParameterCount()==0 &&
//                    method.getModifiers()== Modifier.PUBLIC//调用所有公开方法
//            ) {
                    System.out.println("调用方法：" + method.getName() + "()"); // 方法的名称
                    method.setAccessible(true);//强行打开访问权限
                    method.invoke(obj);
                    method.setAccessible(false);//应用后应当及时关闭访问权限
                }
            }
//            System.out.println(method.getParameterCount()); //方法参数的个数
//            Parameter[] parameters = method.getParameters(); // 方法所有的参数，数组
//            for (Parameter parameter : parameters) {
//                System.out.println(parameter.getName()); // 参数的名字
//                System.out.println(parameter.getType().getName()); // 参数的类型
//            }
            System.out.println("------");

        }
    }
}
